home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 23 / AACD 23.iso / AACD / Programming / tek / task / wait.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-05-12  |  605 b   |  41 lines

  1.  
  2. #include "tek/exec.h"
  3. #include "tek/kn/exec.h"
  4.  
  5. /* 
  6. **    TEKlib
  7. **    (C) 2001 TEK neoscientists
  8. **    all rights reserved.
  9. **
  10. **    TUINT TWait(TAPTR task, TUINT sigmask)
  11. **
  12. **    suspend task to wait for a set of signals.
  13. **
  14. */
  15.  
  16. TUINT TWait(TAPTR task, TUINT sigmask)
  17. {
  18.     if (sigmask)
  19.     {
  20.         TUINT signals;
  21.         for (;;)
  22.         {
  23.             kn_lock(&((TTASK *) task)->siglock);
  24.  
  25.             signals = ((TTASK *) task)->sigstate & sigmask;
  26.             ((TTASK *) task)->sigstate &= ~sigmask;
  27.             
  28.             kn_unlock(&((TTASK *) task)->siglock);
  29.  
  30.             if (signals)
  31.             {
  32.                 return signals;
  33.             }
  34.  
  35.             kn_waitevent(&((TTASK *) task)->sigevent);
  36.         }
  37.     }
  38.     
  39.     return 0;
  40. }
  41.